package core;

import com.mysql.jdbc.ResultSet;
import dbManagement.dbManager;
import hirondelle.date4j.DateTime;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.LinkedList;
import logManagement.Log4k;
import objects.Macro;

/**
 *
 * @author administrator
 */
public class PatientListBean implements Serializable{
    private LinkedList<PatientBean> patientList = new LinkedList<PatientBean>();
    private int docId;
    
    private String error; /* for Log4k.debug function */
    
    /*
     * Le funzioni del database restituiscono dei ResultSet completi
     * di tutti i campi del Paziente e vengono parsati in oggetti Patient
     * e inseriti nella lista.
     * La lista verra' poi restituita dalla funzione apposita per
     * la stampa in tabella.
     */
    
    private void parseQuery(ResultSet r){
        error="inizio il parsing della Lista di Pazienti";
        Log4k.debug(this.getClass().getName(), error);
        int i=0;
        
        this.patientList.clear(); //Cancella tutti i precedenti risultati
        
        try {
            error="r.first() = "+r.first();
            Log4k.debug(this.getClass().getName(), error);
            if(r.first()){
                while (!r.isAfterLast()) {
                    PatientBean p = new PatientBean();
                    p.setId(r.getInt("patient_id"));
                    p.setUsername(r.getString("username"));
                    p.setPassword(r.getString("password"));
                    p.setName(r.getString("name"));
                    p.setSurname(r.getString("surname"));
                    p.setEmail(r.getString("email_addr"));
                    p.setPhone(r.getString("cell_number"));
                    p.setGender(r.getString("gender").charAt(0));                    
                    p.setBirthdate(new DateTime (r.getString("birthDate")));
                    p.setBirthplace(r.getString("birthPlace"));
                    p.setAddress(r.getString("address"));
                    p.setCap(r.getString("cap"));
                    p.setCoords(r.getString("coords"));
                    p.setParentId(r.getInt("parent_id"));
                    p.setChiefTainId(r.getInt("chieftain_id"));
                    p.setRefDoctorId(r.getInt("refDoctor_id"));
                    p.setPicture(r.getString("picture"));
                    //p.setLatitude(r.getString("latitude")); NOT PRESENT YET
                    //p.setLongitude(r.getString("longitude")); NOT PRESENT YET      
                    
                    error="Recuperato il paziente numero "+(i+1);
                    Log4k.debug(this.getClass().getName(), error);
                    
                    patientList.add(p);
                    i++;
                    
                    r.next();
                    
                    error="Aggiunto il paziente numero "+i;
                    Log4k.debug(this.getClass().getName(), error);
                }
            }
            else{
                error="Nessun paziente trovato, potrebbe esserci un errore!";
                Log4k.warn(this.getClass().getName(), error);
            }
            error="Fine parsing della query. record trovati: "+i;
            Log4k.debug(this.getClass().getName(), error);
        } catch (SQLException ex) {
            error = "Si è verificato un errore durante la creazione della lista";
            Log4k.error(this.getClass().getName(), error + ": " + ex.getMessage());
        }
    }
    
    /* Salva nella patientList tutti i pazienti di un dato medico.
     * docId deve essere settato a questo punto
     */
    public void allMyPatients(){ 
        error="inizio recupero pazienti per docID="+this.docId + " (funzione allMyPatients)";
        Log4k.debug(this.getClass().getName(), error);
        dbManager db = new dbManager();
        parseQuery(db.getPatients(this.docId));
        db.releaseConnection();
    }

    /* Salva nella patientList tutti i pazienti presenti nel DB.
     * docId deve essere settato a questo punto
     */
    public void allPatients(){ 
        error="inizio recupero pazienti (funzione allPatients)";
        Log4k.debug(this.getClass().getName(), error);
        dbManager db = new dbManager();
        parseQuery(db.getAllPatients());
        db.releaseConnection();
    }
    
    /**
     * @return the patientList
     */
    public LinkedList<PatientBean> getPatientList() {
        return patientList;
    }

    /**
     * @param patientList the patientList to set
     */
    public void setPatientList(LinkedList<PatientBean> patientList) {
        this.patientList = patientList;
    }

    /**
     * @return the docId
     */
    public int getDocId() {
        return docId;
    }

    /**
     * @param docId the docId to set
     */
    public void setDocId(int docId) {
        this.docId = docId;
        error="doctor ID settato a: "+this.docId;
        Log4k.debug(this.getClass().getName(), error);
    }
}
